/**
 * 
 */
package ar.utn.frgp.banco.entity;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import ar.utn.frgp.banco.entity.enums.Acreditacion;
import ar.utn.frgp.banco.entity.enums.OrigenFondos;

/**
 * @author Backup_LABS
 *
 */
@Entity
@Table(name="PLAZO_FIJO")
@SequenceGenerator(sequenceName="PLAZO_FIJO_ID",name="s_plazofijo")
public class PlazoFijo {
	
	@Id
	@Column(name="ID_PFJ",nullable=false,columnDefinition="number")
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="s_plazofijo")
	private Long id;
	
	@Column(name="DNI",nullable=false,length=8)
	private String dni;
	
	@Column(name="FECHA_ALTA",nullable=false)
	private Date fechaAlta;
	
	@Column(name="FECHA_VENCIMIENTO",nullable=false)
	private Date fechaVencimiento;
	
	@Enumerated(EnumType.STRING)
	@Column(name="ORIGEN",nullable=false)
	private OrigenFondos origenPlazo;
	
	@Enumerated(EnumType.STRING)
	@Column(name="ACREDITACION")
	private Acreditacion acreditacion;
	
	@OneToOne
	@JoinColumn(name="NRO_CTA_DESTINO")
	private Cuenta cuentaDestino;
	
	@Column(name="MONTO")
	private BigDecimal monto;
	
	@Column(name="INTERES")
	private BigDecimal interes;
	
	
	/**
	 * @return the cuentaDestino
	 */
	public Cuenta getCuentaDestino() {
		return cuentaDestino;
	}
	/**
	 * @param cuentaDestino the cuentaDestino to set
	 */
	public void setCuentaDestino(Cuenta cuentaDestino) {
		this.cuentaDestino = cuentaDestino;
	}
	
	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}
	/**
	 * @return the fechaAlta
	 */
	public Date getFechaAlta() {
		return fechaAlta;
	}
	/**
	 * @param fechaAlta the fechaAlta to set
	 */
	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}
	/**
	 * @return the fechaVencimiento
	 */
	public Date getFechaVencimiento() {
		return fechaVencimiento;
	}
	/**
	 * @param fechaVencimiento the fechaVencimiento to set
	 */
	public void setFechaVencimiento(Date fechaVencimiento) {
		this.fechaVencimiento = fechaVencimiento;
	}
	/**
	 * @return the dni
	 */
	public String getDni() {
		return dni;
	}
	/**
	 * @param dni the dni to set
	 */
	public void setDni(String dni) {
		this.dni = dni;
	}
	
	/**
	 * @return the origenPlazo
	 */
	public OrigenFondos getOrigenPlazo() {
		return origenPlazo;
	}
	
	/**
	 * @param origenPlazo the origenPlazo to set
	 */
	public void setOrigenPlazo(OrigenFondos origenPlazo) {
		this.origenPlazo = origenPlazo;
	}
	
	
	public void setOrigenPlazo(String origenPlazo) {
		this.origenPlazo = OrigenFondos.obtenerOrigenFondos(origenPlazo);
	}
	
	/**
	 * @return the monto
	 */
	public BigDecimal getMonto() {
		return monto;
	}
	/**
	 * @param monto the monto to set
	 */
	public void setMonto(BigDecimal monto) {
		this.monto = monto;
	}
	/**
	 * @return the interes
	 */
	public BigDecimal getInteres() {
		return interes;
	}
	/**
	 * @param interes the interes to set
	 */
	public void setInteres(BigDecimal interes) {
		this.interes = interes;
	}
	/**
	 * @return the acreditacion
	 */
	public Acreditacion getAcreditacion() {
		return acreditacion;
	}
	/**
	 * @param acreditacion the acreditacion to set
	 */
	public void setAcreditacion(Acreditacion acreditacion) {
		this.acreditacion = acreditacion;
	}
	
	public void setAcreditacion(String variable) {
		this.acreditacion = Acreditacion.obtenerAcreditacion(variable);
	}
	
	public Integer getDiasPlazoFijo(){
		long MILISEGUNDOS = 24 * 60 * 60 * 1000;
		
		if (this.fechaAlta == null || this.fechaVencimiento == null) return -1;
		
		return new Long((this.fechaVencimiento.getTime() - this.fechaAlta.getTime()) / MILISEGUNDOS).intValue();
		
		
	}
	
}
